/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ebay;

import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.webui.jsf.component.Button;
import com.sun.webui.jsf.component.StaticText;
import ebay.db.DBcommon;
import ebay.obj.AuctionItem;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import javax.faces.FacesException;
import javax.faces.event.ValueChangeEvent;


/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @version showItem.java
 * @version Created on 2011-6-5, 23:32:34
 * @author Administrator
 */

public class showItem extends AbstractPageBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
    }

    // </editor-fold>

    private AuctionItem aAuctionItem = new AuctionItem();
    private DBcommon aDB = new DBcommon();

    private String auctionItemName = " ";
    private String auctionItemDescription = " ";
    private String fixedPrice = " ";
    private String currentMaxPrice = " ";
    private String bidPrice = " ";
    private String watch = " ";
    private String bidInfo = "请输入您愿意出的价格，并点击竞标";
    private int itemNumber;
    private int userNo;
    private String state = "此物品仍在竞拍中";
    private String closingDate = " ";
    private String handlingCost = " ";
    private String shoppingCost = " ";

        /**
     * <p>Construct a new Page bean instance.</p>
     */
    public showItem() {
        this.setItemNumber(this.getApplicationBean1().itemNumber);
        this.setUserNo(this.getApplicationBean1().userNo);
        
        ref();
    }
    
    public void ref()
    {
        aAuctionItem = aDB.queryAuctionItem(itemNumber);
        if (aAuctionItem.isState() == false)
        {
             this.setState("此物品的竞拍已结束");
             this.setFixedPrice(" ");
             this.setCurrentMaxPrice(" ");
        }
        else
        {
            this.setFixedPrice(String.valueOf(aAuctionItem.getFixedPrice()));
            this.setCurrentMaxPrice(String.valueOf(aAuctionItem.getCurrentMaxPrice()));
        }
        this.setAuctionItemName(aAuctionItem.getName());
        this.setAuctionItemDescription(aAuctionItem.getDescription());
        
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        this.setClosingDate(df.format(aAuctionItem.getClosingDate()));
        this.setHandlingCost(Integer.toString(aAuctionItem.getHandlingCost()));
        this.setShoppingCost(Integer.toString(aAuctionItem.getShippingCost()));
    }

    public String getHandlingCost() {
        return handlingCost;
    }

    public void setHandlingCost(String handlingCost) {
        this.handlingCost = handlingCost;
    }

    public String getClosingDate() {
        return closingDate;
    }

    public void setClosingDate(String closingDate) {
        this.closingDate = closingDate;
    }

    public String getShoppingCost() {
        return shoppingCost;
    }

    public void setShoppingCost(String shoppingCost) {
        this.shoppingCost = shoppingCost;
    }



    /**
     * Get the value of state
     *
     * @return the value of state
     */
    public String getState() {
        return state;
    }

    /**
     * Set the value of state
     *
     * @param state new value of state
     */
    public void setState(String state) {
        this.state = state;
    }

    /**
     * Get the value of bidInfo
     *
     * @return the value of bidInfo
     */
    public String getBidInfo() {
        return bidInfo;
    }

    /**
     * Set the value of bidInfo
     *
     * @param bidInfo new value of bidInfo
     */
    public void setBidInfo(String bidInfo) {
        this.bidInfo = bidInfo;
    }

    /**
     * Get the value of userNo
     *
     * @return the value of userNo
     */
    public int getUserNo() {
        return userNo;
    }

    /**
     * Set the value of userNo
     *
     * @param userNo new value of userNo
     */
    public void setUserNo(int userNo) {
        this.userNo = userNo;
    }

    /**
     * Get the value of itemNumber
     *
     * @return the value of itemNumber
     */
    public int getItemNumber() {
        return itemNumber;
    }

    /**
     * Set the value of itemNumber
     *
     * @param itemNumber new value of itemNumber
     */
    public void setItemNumber(int itemNumber) {
        this.itemNumber = itemNumber;
    }

    /**
     * Get the value of watch
     *
     * @return the value of watch
     */
    public String getWatch() {
        return watch;
    }

    /**
     * Set the value of watch
     *
     * @param watch new value of watch
     */
    public void setWatch(String watch) {
        this.watch = watch;
    }

    /**
     * Get the value of bidPrice
     *
     * @return the value of bidPrice
     */
    public String getBidPrice() {
        return bidPrice;
    }

    /**
     * Set the value of bidPrice
     *
     * @param bidPrice new value of bidPrice
     */
    public void setBidPrice(String bidPrice) {
        this.bidPrice = bidPrice;
    }

    /**
     * Get the value of currentMaxPrice
     *
     * @return the value of currentMaxPrice
     */
    public String getCurrentMaxPrice() {
        return currentMaxPrice;
    }

    /**
     * Set the value of currentMaxPrice
     *
     * @param currentMaxPrice new value of currentMaxPrice
     */
    public void setCurrentMaxPrice(String currentMaxPrice) {
        this.currentMaxPrice = currentMaxPrice;
    }

    /**
     * Get the value of fixedPrice
     *
     * @return the value of fixedPrice
     */
    public String getFixedPrice() {
        return fixedPrice;
    }

    /**
     * Set the value of fixedPrice
     *
     * @param fixedPrice new value of fixedPrice
     */
    public void setFixedPrice(String fixedPrice) {
        this.fixedPrice = fixedPrice;
    }

    /**
     * Get the value of auctionItemDescription
     *
     * @return the value of auctionItemDescription
     */
    public String getAuctionItemDescription() {
        return auctionItemDescription;
    }

    /**
     * Set the value of auctionItemDescription
     *
     * @param auctionItemDescription new value of auctionItemDescription
     */
    public void setAuctionItemDescription(String auctionItemDescription) {
        this.auctionItemDescription = auctionItemDescription;
    }


    /**
     * Get the value of auctionItemName
     *
     * @return the value of auctionItemName
     */
    public String getAuctionItemName() {
        return auctionItemName;
    }

    /**
     * Set the value of auctionItemName
     *
     * @param auctionItemName new value of auctionItemName
     */
    public void setAuctionItemName(String auctionItemName) {
        this.auctionItemName = auctionItemName;
    }



    /**
     * <p>Callback method that is called whenever a page is navigated to,
     * either directly via a URL, or indirectly via page navigation.
     * Customize this method to acquire resources that will be needed
     * for event handlers and lifecycle methods, whether or not this
     * page is performing post back processing.</p>
     * 
     * <p>Note that, if the current request is a postback, the property
     * values of the components do <strong>not</strong> represent any
     * values submitted with this request.  Instead, they represent the
     * property values that were saved for this view when it was rendered.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here
        
        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("showItem Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
        
        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
        // TODO - add your own initialization code here
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    @Override
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    @Override
    public void prerender() {
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     */
    @Override
    public void destroy() {
    }

    /**
     * <p>返回对已限定范围的数据 Bean 的引用。</p>
     *
     * @return 引用已限定范围的数据 Bean
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    /**
     * <p>返回对已限定范围的数据 Bean 的引用。</p>
     *
     * @return 引用已限定范围的数据 Bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    /**
     * <p>返回对已限定范围的数据 Bean 的引用。</p>
     *
     * @return 引用已限定范围的数据 Bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    public String button1_action() {
        //待办事项：执行此操作。返回值为某个导航
        //情况名称；如果返回值为空，将返回至同一页面。
        Timestamp currentTime =new Timestamp(System.currentTimeMillis());


        if (aAuctionItem.getClosingDate().before(currentTime))
        {
            this.setBidInfo("此物品已到期");
        }
        else
        {
            aDB.updateMaxPrice(itemNumber, Integer.valueOf(currentMaxPrice), userNo);
            aDB.changeAuctionState(itemNumber);
            ref();
            this.setBidInfo("已一口价买下");
        }

        return null;
    }

    public void textField2_processValueChange(ValueChangeEvent event) {
    }

    public String button2_action() {
        //待办事项：执行此操作。返回值为某个导航
        //情况名称；如果返回值为空，将返回至同一页面。

        Timestamp currentTime =new Timestamp(System.currentTimeMillis());



        if ((Integer.valueOf(bidPrice) <= aAuctionItem.getCurrentMaxPrice()) && (Integer.valueOf(bidPrice) >= aAuctionItem.getFixedPrice()))
        {
            this.setBidInfo("高于当前最高价格，低于一口价");
        }
        else
        {
            if (aAuctionItem.getClosingDate().before(currentTime))
            {
                this.setBidInfo("此物品已到期");
            }
            else
            {
                aDB.updateMaxPrice(itemNumber, Integer.valueOf(bidPrice), userNo);
                ref();
                this.setBidInfo("竞拍成功");
            }
        }
        return null;
    }

    public String button3_action() {
        //待办事项：执行此操作。返回值为某个导航
        //情况名称；如果返回值为空，将返回至同一页面。
        int i;
        ArrayList<Integer> list = new ArrayList<Integer>();
        list = aDB.listWatch(userNo);
        for (i=0;i<list.size();i++)
        {
            if (list.get(i) == itemNumber)
            {
                this.setWatch("此物品已在关注列表中");
            }
        }
        if (this.getWatch().compareTo("此物品已在关注列表中") != 0 )
        {
             aDB.addWatch(itemNumber, userNo);
             this.setWatch("已加关注");
        }
        return null;
    }


}

